import exp from "constants"
import { TaskStatusEnum } from "./BpmTaskModel"

// 节点类型
export enum BpmNodeType {
  // 开始节点
  EndEventNode = 1,
  // 发起人节点
  StartUserNode = 10,
  // 审批人节点
  UserTaskNode = 11,
  // 抄送节点
  CopyTaskNode = 12,
  // 条件节点
  ConditionNode = 50,
  // 会签节点
  SignTaskNode = 13,
  // 条件分支节点
  ConditionBranchNode = 51,
  // 并行分支节点
  ParallelBranchNode = 52,
  // 包含分支节点
  InclusiveBranchNode = 53
}

// 节点ID
export enum BpmNodeId {
  // 结束节点
  EndEventNodeId = 'EndEvent',
  // 发起人节点
  StartUserNodeId = 'StartUserNode'
}

// 审批类型
export enum BpmApproveType {
  // 人工审批
  User = 1,
  // 自动通过
  AutoApprove = 2,
  // 自动拒绝
  AutoReject = 3
}

// 候选人策略枚举 （ 用于审批节点。抄送节点 )
export enum BpmCandidateStrategy {
  /**
    * 指定角色
    */
  Role = 10,
  /**
   * 部门成员
   */
  DeptMember = 20,
  /**
   * 部门的负责人
   */
  DeptLeader = 21,
  /**
   * 连续多级部门的负责人
   */
  MultLevelDeptLeader = 23,
  /**
   * 指定岗位
   */
  Post = 22,
  /**
   * 指定用户
   */
  User = 30,
  /**
   * 发起人自选
   */
  StartUserSelect = 35,
  /**
   * 发起人自己
   */
  StartUser = 36,
  /**
   * 发起人部门负责人
   */
  StartUserDeptLeader = 37,
  /**
   * 发起人连续多级部门的负责人
   */
  StartUserMultiLevelDeptLeader = 38,
  /**
   * 指定用户组
   */
  UserGroup = 40,
  /**
   * 表单内用户字段
   */
  FormUser = 50,
  /**
   * 表单内部门负责人
   */
  FormDeptLeader = 51,
  /**
   * 流程表达式
   */
  Expression = 60
}

// 审批方法类型
export enum BpmApproveMethodType {
  // 按顺序依次审批
  SequentialApprove = 4,
  // 会签（可同时审批，至少 N 人必须审批通过）
  ApproveByRatio = 2,
  // 或签（可同时审批，有一人通过即可）
  AnyApprove = 3,
  // 随机挑选一人审批
  RandomSelectOneApprove = 1
}

// 条件配置类型
export enum BpmConditionType {
  // 表达式
  Expression = 1,
  // 规则
  Rule = 2
}

// 按钮类型
export enum BpmButtonType {
  // 通过
  Approve = 1,
  // 拒绝
  Reject = 2,
  // 退回
  Return = 6,
  // 转办
  Transfer = 3,
  // 加签
  AddSign = 5,
  // 委派
  DELEGATE = 4,
  // 抄送
  COPY = 7
}



// 流程定义结
export interface BpmFlowNode {
  id: string
  type: BpmNodeType
  name: string
  showText?: string
  // 孩子节点
  childNode?: BpmFlowNode
  // 条件节点
  conditionNodes?: BpmFlowNode[]
  // 审批类型
  approveType?: BpmApproveType
  // 候选人策略
  candidateStrategy?: number
  // 候选人参数
  candidateParam?: string
  // 多人审批方式
  approveMethod?: BpmApproveMethodType
  //通过比例
  approveRatio?: number
  // 审批按钮设置
  buttonsSetting?: any[]
  // 表单权限
  fieldsPermission?: Array<Record<string, any>>
  // 审批任务超时处理
  timeoutHandler?: TimeoutHandler
  // 审批任务拒绝处理
  rejectHandler?: RejectHandler
  // 审批人为空的处理
  assignEmptyHandler?: AssignEmptyHandler
  // 审批节点的审批人与发起人相同时，对应的处理类型
  assignStartUserHandlerType?: number
  // 条件类型
  conditionType?: BpmConditionType
  // 条件表达式
  conditionExpression?: string
  // 条件组
  conditionGroups?: ConditionGroup
  // 是否默认的条件
  defaultFlow?: boolean
  // 活动的状态，用于前端节点状态展示
  activityStatus?: TaskStatusEnum
}

